ল্যাম্বডা এক্সপ্রেশন C++11 এ যুক্ত হওয়া একটি বৈশিষ্ট্য, যা ইনলাইন বা অ্যানোনিমাস ফাংশন তৈরি করতে ব্যবহৃত হয়। এটি বিশেষ করে ছোট ছোট ফাংশন বা কলব্যাক ফাংশন হিসেবে ব্যবহৃত হয়, যেখানে ফাংশনের নাম না দিয়ে সরাসরি ফাংশন ডিফাইন করা যায়। ল্যাম্বডা এক্সপ্রেশন কোডকে আরও সংক্ষিপ্ত এবং কার্যকর করে তোলে।
ল্যাম্বডা এক্সপ্রেশনের সিনট্যাক্স
[capture_list] (parameters) -> return_type {
// function body
};
- capture_list: এই তালিকায় বাইরের ভ্যারিয়েবলগুলো উল্লেখ করা হয়, যেগুলো ল্যাম্বডা এক্সপ্রেশনে ব্যবহৃত হবে।
- parameters: এখানে ফাংশনের ইনপুট প্যারামিটার উল্লেখ করা হয় (যেমন কোনো সাধারণ ফাংশনে থাকে)।
- return_type: এখানে রিটার্ন টাইপ উল্লেখ করা হয়। যদি টাইপ না দেওয়া হয়, তবে কম্পাইলার তা নির্ধারণ করতে পারে।
- function body: এখানে ল্যাম্বডা এক্সপ্রেশনের ফাংশন বডি থাকে, যেখানে ফাংশনের কার্যাবলী উল্লেখ করা হয়।
উদাহরণ: সাধারণ ল্যাম্বডা এক্সপ্রেশন
#include <iostream>
using namespace std;
int main() {
auto add = [](int a, int b) -> int {
return a + b;
};
cout << "Sum: " << add(5, 3) << endl;
return 0;
}
বর্ণনা:
- এখানে
addনামে একটি ল্যাম্বডা এক্সপ্রেশন তৈরি করা হয়েছে, যা দুইটিintপ্যারামিটার গ্রহণ করে এবং তাদের যোগফল রিটার্ন করে। add(5, 3)কল করলে ৫ এবং ৩ এর যোগফল প্রদান করবে।
আউটপুট:
Sum: 8
ল্যাম্বডা এক্সপ্রেশনে ক্যাপচার লিস্ট ব্যবহার
ক্যাপচার লিস্টের মাধ্যমে ল্যাম্বডা এক্সপ্রেশন বাইরের ভ্যারিয়েবল অ্যাক্সেস করতে পারে। এর মাধ্যমে বিভিন্নভাবে বাইরের ভ্যারিয়েবল ব্যবহার করা যায়।
- [=]: সকল বাইরের ভ্যারিয়েবল কপি করে ব্যবহৃত হয়।
- [&]: সকল বাইরের ভ্যারিয়েবল রেফারেন্স করে ব্যবহৃত হয়।
- [specific_variable]: নির্দিষ্ট ভ্যারিয়েবল কপি করে ব্যবহৃত হয়।
- [=, &var]: নির্দিষ্ট ভ্যারিয়েবল রেফারেন্স এবং বাকিগুলো কপি করে ব্যবহৃত হয়।
উদাহরণ: ক্যাপচার লিস্ট ব্যবহার
#include <iostream>
using namespace std;
int main() {
int x = 5;
int y = 10;
auto add = [x, &y]() {
// x কপি করা হয়েছে এবং y রেফারেন্স করা হয়েছে
cout << "Inside Lambda - x: " << x << ", y: " << y << endl;
y += 10;
};
add();
cout << "Outside Lambda - x: " << x << ", y: " << y << endl;
return 0;
}
বর্ণনা:
- এখানে
xকে কপি করা হয়েছে এবংyকে রেফারেন্স করে ব্যবহার করা হয়েছে। - ল্যাম্বডা এক্সপ্রেশন
yএর মান পরিবর্তন করতে পারে কারণ এটি রেফারেন্স হিসেবে পাস করা হয়েছে।
আউটপুট:
Inside Lambda - x: 5, y: 10
Outside Lambda - x: 5, y: 20
ল্যাম্বডা এক্সপ্রেশনে STL অ্যালগরিদমের সাথে ব্যবহার
ল্যাম্বডা এক্সপ্রেশন সাধারণত STL অ্যালগরিদম, যেমন std::for_each, std::find_if, std::sort ইত্যাদির সাথে সহজে ব্যবহার করা যায়।
উদাহরণ: std::for_each এর সাথে ল্যাম্বডা এক্সপ্রেশন
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> numbers = {1, 2, 3, 4, 5};
// ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে প্রতিটি মান প্রিন্ট করা
for_each(numbers.begin(), numbers.end(), [](int n) {
cout << n << " ";
});
cout << endl;
return 0;
}
আউটপুট:
1 2 3 4 5
ল্যাম্বডা এক্সপ্রেশনের বিভিন্ন বৈশিষ্ট্য
- ইনলাইন ফাংশন: ল্যাম্বডা এক্সপ্রেশন ইনলাইন ফাংশন হিসেবে কাজ করে।
- প্যারামিটার এবং রিটার্ন টাইপ উল্লেখ করা প্রয়োজন নেই: যদি ল্যাম্বডা এক্সপ্রেশন সরাসরি এক্সপ্রেশন রিটার্ন করে, তবে C++ নিজেই রিটার্ন টাইপ নির্ধারণ করতে পারে।
- ক্যাপচার লিস্টের মাধ্যমে বাইরের ভ্যারিয়েবল ব্যবহার করা: এটি ভ্যারিয়েবল কপি বা রেফারেন্স হিসেবে নিতে পারে।
উদাহরণ: রিটার্ন টাইপ উল্লেখ না করে
#include <iostream>
using namespace std;
int main() {
auto multiply = [](int a, int b) {
return a * b;
};
cout << "Multiplication: " << multiply(4, 5) << endl;
return 0;
}
আউটপুট:
Multiplication: 20
ল্যাম্বডা এক্সপ্রেশনের ব্যবহারিক দিক
- STL ফাংশনের সাথে ব্যবহার:
for_each,find_if,sortইত্যাদি অ্যালগরিদমে সহজেই ছোট ছোট লজিক যোগ করা যায়। - কোলব্যাক ফাংশন: ইভেন্ট হ্যান্ডলিং বা থ্রেডিং এর কোলব্যাক ফাংশন হিসেবে ব্যবহার করা যায়।
- সংক্ষিপ্ত ফাংশন তৈরি: ল্যাম্বডা এক্সপ্রেশন সহজভাবে ইনলাইন ফাংশন তৈরির জন্য ব্যবহৃত হয়, যেখানে পুনরায় ব্যবহারের প্রয়োজন নেই।
সারসংক্ষেপ
| উপাদান | বর্ণনা |
|---|---|
| [capture_list] | বাইরের ভ্যারিয়েবল কীভাবে ব্যবহার হবে তা উল্লেখ করে |
| (parameters) | ল্যাম্বডা এক্সপ্রেশনের ইনপুট প্যারামিটার |
| -> return_type | রিটার্ন টাইপ উল্লেখ করতে ব্যবহৃত, তবে অনেক ক্ষেত্রেই এটি অপ্রয়োজনীয় |
| function body | ফাংশনের কার্যাবলী উল্লেখ করা হয় |
ল্যাম্বডা এক্সপ্রেশন C++ প্রোগ্রামিংয়ে কোড সংক্ষিপ্ত এবং সহজ করে তোলে, বিশেষ করে ছোট ফাংশন বা কোলব্যাক হিসেবে এর ব্যবহার খুবই কার্যকর। C++11 এর এই বৈশিষ্ট্য প্রোগ্রামারদের জটিল কাজ সহজভাবে করতে সাহায্য করে।
Read more